﻿#include "dialog_importsqlite.h"
#include "ui_dialog_importsqlite.h"

#include <QFileDialog>

#include <xml/cxmlparser.h>
#include <sql/csqlmanager.h>

DIALOG_ImportSQLite::DIALOG_ImportSQLite(QDialog *parent) :
    QDialog(parent),
    ui(new Ui::DIALOG_ImportSQLite)
{
    ui->setupUi(this);
    init();
}

DIALOG_ImportSQLite::~DIALOG_ImportSQLite()
{
    delete ui;
}

// 初始化界面信息
// 设置界面的标题名
void DIALOG_ImportSQLite::init()
{
    setWindowTitle(WINDOW_TITLE_IMPORT_SQLITE);
}

// 用户点击了[浏览]按钮
// 浏览选择备份的文件(*.xml)
void DIALOG_ImportSQLite::on_btn_view_clicked()
{
    QString qstr_dir = QFileDialog::getOpenFileName(this, L8BStr("选择XML文件"),  L8BStr(""), NULL);
    if (qstr_dir.isNull())
    {
        // 用户点击了取消
#ifdef _N_Debug_
        qDebug() << L8BStr("函数【DIALOG_ImportSQLite::on_btn_view_clicked()】用户点击了取消");
#endif
        return;
    }
    else
    {
        // 路径显示到界面上
        ui->edt_xmlPath->setText(qstr_dir);
#ifdef _N_Debug_
        qDebug() << L8BStr("函数【DIALOG_ImportSQLite::on_btn_view_clicked()】用户选择的路径为：") << qstr_dir;
#endif
    }
}

// 用户点击了[导入]按钮
// 读取编辑框中的xml文件路径，解析这个xml文件，把解析出来的题目加入到数据库中
void DIALOG_ImportSQLite::on_btn_import_clicked()
{
    QString xmlFilePath = ui->edt_xmlPath->text();
#ifdef _N_Debug_
        qDebug() << L8BStr("函数【DIALOG_ImportSQLite::on_btn_import_clicked()】编辑框中的xml文件路径为：") << xmlFilePath;
#endif

    // 解析xml文件
    QList<stQuestion> qlist = CXMLParser::parseQuesLibXMLFile(xmlFilePath);

    // 数据库对象，后面要关闭数据库
    QSqlDatabase db = QSqlDatabase::database("qt_sql_default_connection");
    int size  = qlist.size();
#ifdef _N_Debug_
        qDebug() << L8BStr("函数【DIALOG_ImportSQLite::on_btn_import_clicked()】xml文件解析出题目的数量为：") << QString::number(size);
#endif

    // 清空数据库中的内容，为导入新的数据库做准备。
    QString truncateSql = "delete from " + QUES_TABLE_NAME;
    CSQLManager::exec(db, truncateSql);

    // 双引号
    QString doubleQuotationMark = "\"";
    int successAcount = 0;
    for (int i = 0; i < size; i++)
    {
        stQuestion ques = qlist.at(i);
        QString sql = "insert into " + QString(QUES_TABLE_NAME) + " values(";
        sql += doubleQuotationMark + ques.protectionPosition + doubleQuotationMark + ", ";
        sql += doubleQuotationMark + ques.difficulty         + doubleQuotationMark + ", ";
        sql += doubleQuotationMark + ques.innerNumber        + doubleQuotationMark + ", ";
        sql += doubleQuotationMark + ques.fileMd5            + doubleQuotationMark + ", ";
        sql += doubleQuotationMark + ques.flag               + doubleQuotationMark + ", ";
        sql += doubleQuotationMark + ques.knowledgePoints    + doubleQuotationMark + ", ";
        sql += doubleQuotationMark + ques.fromWhere          + doubleQuotationMark;
        sql += ")";
        bool isRight = CSQLManager::exec(db, sql);
#ifdef _N_Debug_
        qDebug() << L8BStr("函数【DIALOG_ImportSQLite::on_btn_import_clicked()】编辑框中的xml文件路径为：") << xmlFilePath;
        qDebug() << L8BStr("sql语句执行结果：[") << isRight << L8BStr("]sql语句为：") << sql;
#endif
        if (isRight)
        {
            successAcount++;
        }
    }

    // 收尾工作
    db.close();
    close();

    // 提示对话框
    QMessageBox msg(this);
    msg.setWindowTitle(L8BStr("导入题库信息"));
    msg.setText(L8BStr("共发现") + QString::number(size) + L8BStr("条题目信息。成功导入") + QString::number(successAcount) + L8BStr("条题目信息。"));//对话框提示文本
    msg.setIcon(QMessageBox::Information);
    msg.setStandardButtons(QMessageBox::Ok);
    msg.exec();
}


